using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Logical.Comercial;
using Marlimer.Logical.Universal;
using Marlimer.Common;
using Marlimer.Logical.Almacen;
using Marlimer.Logistico.Procesos;  

namespace Marlimer.Logistico.Consultas
{
    public partial class frm_ConsultaGuiaAlmacen : Form
    {

        private lalm_GuiaAlmacenCab lalm_guiaalmacencab = new lalm_GuiaAlmacenCab();
        private lalm_Producto lalm_producto = new lalm_Producto(); 
        private luni_TipoMovimiento luni_tipomovimiento = new luni_TipoMovimiento(); 
        List<itemsGrilla> itemsGrid = new List<itemsGrilla>();

        public frm_ConsultaGuiaAlmacen()
        {
            InitializeComponent();
        }


        private void frm_ConsultaDocumentos_Load(object sender, EventArgs e)
        {
            //cargar estructura de grilla;
            itemsGrid.Add(new itemsGrilla("ccod_doc", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cabre_docvta", "Tipo Doc", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnum_serie", "Serie", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cnum_guia", "Numero", 60, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("dfec_sal", "Fecha", 70, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("cnum_docref", "Doc Ref.", 120, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("ccod_tipmov", "", 60, false, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cdes_tipmov", "Motivo Mov", 150, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("tipmov", "Tipo Mov", 80, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("valorizado", "Valorizado", 80, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("cstatus", "Estado", 45, true, true, DataGridViewContentAlignment.MiddleCenter));

            //establecer fechas para el dia
            dtpFecIni.Value = System.DateTime.Today;
            dtpFecFin.Value = System.DateTime.Today;

            CargarCombos();
            ConfigurarRejilla();

            this.Location = new Point(0, 0);
        }

        private void ConfigurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Tipo Doc", 50, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Serie", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Numero", 60, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Fecha", 70, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Doc Ref.", 120, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Motivo Mov", 150, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Tipo Mov", 80, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Valorizado", 80, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Estado", 45, true, true, DataGridViewContentAlignment.MiddleLeft));

            //gridResultados.AllowUserToResizeColumns = false;
            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
            gridResultados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        private void CargarCombos()
        {
            Util.LlenarDataCombo(luni_tipomovimiento.getDTTipoMovimiento(-1), cboDesMotivoMovimiento, true);
        }


        private void buscar()
        {
            int flg_valorizado = 0;
            if (chkValorizado.Checked)
            {
                flg_valorizado = 1;
            }

            int flg_tipomov = -1;
            if (cboTipoMov.Text == "INGRESO")
            {
                flg_tipomov = 0;
            }
            else if ( cboTipoMov.Text == "SALIDA") 
            {
                flg_tipomov = 1;
            }

            DataTable dtresul = lalm_guiaalmacencab.consultaGuiaAlmacen(dtpFecIni.Value, dtpFecFin.Value, Convert.ToInt32(cboDesMotivoMovimiento.SelectedValue), Convert.ToInt32(Util.ToValor(txtCodProducto.Text)),
                flg_tipomov, flg_valorizado);

            gridResultados.DataSource = null;
            ConfigurarRejilla();
            //llenar grilla.
            //considerar que los pedidos que estan anulados 
            //estado D deben estar en color rojo y con cursiva.
            if (dtresul.Rows.Count > 0)
            {
                gridResultados.Columns.Clear();
                //recorrer el datagrid
                gridResultados.DataSource = dtresul;
                Util.setRejillaColumns(gridResultados, itemsGrid);
                //Util.aplicarEstatus(gridResultados, "cstatus");
                //Util.hideShowFilasByValor(gridResultados, "cstatus", chkAnulados.Checked);
                lblResultados.Text = "Registros encontrados: " + dtresul.Rows.Count.ToString();
            }
            else
            {
                //no se encontraron resultados.
                MessageBox.Show("No se encontraron resultados.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                lblResultados.Text = "No se encontraron resultados.";
            }
        }


        private void gridResultados_DoubleClick(object sender, EventArgs e)
        {
            //validamos de que este seleccionado un registro.
            if (gridResultados.CurrentRow != null)
            {
                //verificar que tenga codigo de producto columna 0
                long ccod_doc = Convert.ToInt64(Util.ToValor(Convert.ToString(gridResultados.CurrentRow.Cells[0].Value)));
                if (ccod_doc > 0)
                {
                    frm_GuiaAlmacen Frm_GuiaAlmacen = new frm_GuiaAlmacen();
                    Frm_GuiaAlmacen.MdiParent = this.MdiParent;
                    Frm_GuiaAlmacen.Visible = true;
                    Frm_GuiaAlmacen.cargarDocumento(ccod_doc);
                    Frm_GuiaAlmacen.Activate();
                }
            }
        }

        private void btnAuditoria_Click(object sender, EventArgs e)
        {
            if (gridResultados.CurrentRow != null)
            {
                long ccod_doc = Convert.ToInt64(Util.ToValor(gridResultados.CurrentRow.Cells[0].Value.ToString()));
                //devuelve 
                DataTable dtAudi = new DataTable();
                luni_Auditoria luni_auditoria = new luni_Auditoria();
                dtAudi = luni_auditoria.getAuditoria(ccod_doc, 11);      //codigo de tabla guia almacen
                if (dtAudi.Rows.Count > 0)
                {
                    String msj = Util.doMsjAuditoria(dtAudi);
                    MessageBox.Show(msj, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }



        private void nuevaBusqueda()
        {
            CargarCombos();
            gridResultados.DataSource = null;
            ConfigurarRejilla();
            cboTipoMov.SelectedIndex = -1; 
        }

        private void gridResultados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //validar el formato para anulados
            if (Convert.ToString(gridResultados.Rows[e.RowIndex].Cells["cstatus"].Value) == "D")
            {
                gridResultados.Rows[e.RowIndex].DefaultCellStyle.ForeColor = System.Drawing.Color.Red;
            }
        }

        private void tstGenComandos_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            int indice = -1;
            if (sender.GetType().Name == "ToolStrip")
            {
                indice = tlbComandos.Items.IndexOf(e.ClickedItem);
            }
            else
            {
                indice = mnuComandos.DropDownItems.IndexOf(e.ClickedItem);
            }

            switch (indice)
            {
                case 0:     //nuevaBusqueda
                    {
                        nuevaBusqueda();
                        break;
                    }
                case 1:     //ejecutar busqueda
                    {
                        buscar();
                        break;
                    }
            }
        }

        private void txtGeneralSelect_Enter(object sender, EventArgs e)
        {
            Util.selectAllText(((TextBox)sender));
        }


        private void txtGeneralEntero_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = Util.validaTecla(e.KeyChar, "Entero", ((TextBox)sender).Text, true);
        }

        private void txtCodProducto_Leave(object sender, EventArgs e)
        {
            Boolean ingreso = false;

            if (Util.ToValor(txtCodProducto.Text) > 0)
            {
                DataTable dt = lalm_producto.getProductoDatosByCod(Convert.ToInt32(txtCodProducto.Text));
                if (dt != null)
                {
                    if (dt.Rows.Count > 0)
                    {
                        txtDescripcion.Text = Convert.ToString(Util.getValueDT("cdes_prod", 0, dt));
                    }
                    else
                    {
                        ingreso = true;
                    }
                }
                else
                {
                    ingreso = true;
                }
            }
            else
            {
                ingreso = true;
            }
            if (ingreso)
            {
                txtDescripcion.Text = "";
                txtCodProducto.Text = "";
            }
        }

    }
}